treewide: use "device" option in UCI "interface" sections
authorRafał Miłecki <[email protected]>
Mon, 24 May 2021 16:17:41 +0000 (18:17 +0200)
committerRafał Miłecki <[email protected]>
Thu, 27 May 2021 08:52:51 +0000 (10:52 +0200)
netifd has been recently patched to use "device" option instead of
"ifname" as more clear & accurate.

Signed-off-by: Rafał Miłecki <[email protected]>
modules/luci-base/htdocs/luci-static/resources/network.js
modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js

index 33b48b259ce40eb8f2cd90657c855500b584f251..fccb72b3d28145c01f1f7a82b3bb9fda9f7dac42 100644 (file)
@@ -2496,14 +2496,14 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
         *
         * Alias interfaces are interfaces layering on top of another interface
         * and are denoted by a special `@interfacename` notation in the
-        * underlying `ifname` option.
+        * underlying `device` option.
         *
         * @returns {null|string}
         * Returns the name of the parent interface if this logical interface
         * is an alias or `null` if it is not an alias interface.
         */
        isAlias: function() {
-               var ifnames = L.toArray(uci.get('network', this.sid, 'ifname')),
+               var ifnames = L.toArray(uci.get('network', this.sid, 'device')),
                    parent = null;
 
                for (var i = 0; i < ifnames.length; i++)
@@ -2527,9 +2527,9 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
                        return false;
 
                var empty = true,
-                   ifname = this._get('ifname');
+                   device = this._get('device');
 
-               if (ifname != null && ifname.match(/\S+/))
+               if (device != null && device.match(/\S+/))
                        empty = false;
 
                if (empty == true && getWifiNetidBySid(this.sid) != null)
@@ -2561,18 +2561,18 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
         * argument was invalid, if the device was already part of the logical
         * interface or if the logical interface is virtual.
         */
-       addDevice: function(ifname) {
-               ifname = ifnameOf(ifname);
+       addDevice: function(device) {
+               device = ifnameOf(device);
 
-               if (ifname == null || this.isFloating())
+               if (device == null || this.isFloating())
                        return false;
 
-               var wif = getWifiSidByIfname(ifname);
+               var wif = getWifiSidByIfname(device);
 
                if (wif != null)
                        return appendValue('wireless', wif, 'network', this.sid);
 
-               return appendValue('network', this.sid, 'ifname', ifname);
+               return appendValue('network', this.sid, 'device', device);
        },
 
        /**
@@ -2588,20 +2588,20 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
         * argument was invalid, if the device was already part of the logical
         * interface or if the logical interface is virtual.
         */
-       deleteDevice: function(ifname) {
+       deleteDevice: function(device) {
                var rv = false;
 
-               ifname = ifnameOf(ifname);
+               device = ifnameOf(device);
 
-               if (ifname == null || this.isFloating())
+               if (device == null || this.isFloating())
                        return false;
 
-               var wif = getWifiSidByIfname(ifname);
+               var wif = getWifiSidByIfname(device);
 
                if (wif != null)
                        rv = removeValue('wireless', wif, 'network', this.sid);
 
-               if (removeValue('network', this.sid, 'ifname', ifname))
+               if (removeValue('network', this.sid, 'device', device))
                        rv = true;
 
                return rv;
@@ -2627,7 +2627,7 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
                        return new Device(ifname, this);
                }
                else {
-                       var ifnames = L.toArray(uci.get('network', this.sid, 'ifname'));
+                       var ifnames = L.toArray(uci.get('network', this.sid, 'device'));
 
                        for (var i = 0; i < ifnames.length; i++) {
                                var m = ifnames[i].match(/^([^:/]+)/);
@@ -2682,13 +2682,10 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
                if (!this.isBridge() && !(this.isVirtual() && !this.isFloating()))
                        return null;
 
-               var ifnames = L.toArray(uci.get('network', this.sid, 'ifname'));
+               var device = uci.get('network', this.sid, 'device');
 
-               for (var i = 0; i < ifnames.length; i++) {
-                       if (ifnames[i].charAt(0) == '@')
-                               continue;
-
-                       var m = ifnames[i].match(/^([^:/]+)/);
+               if (device && device.charAt(0) != '@') {
+                       var m = device.match(/^([^:/]+)/);
                        if (m != null)
                                rv.push(Network.prototype.instantiateDevice(m[1], this));
                }
@@ -2730,25 +2727,24 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
         * Returns `true` when this logical interface contains the given network
         * device or `false` if not.
         */
-       containsDevice: function(ifname) {
-               ifname = ifnameOf(ifname);
+       containsDevice: function(device) {
+               device = ifnameOf(device);
 
-               if (ifname == null)
+               if (device == null)
                        return false;
-               else if (this.isVirtual() && '%s-%s'.format(this.getProtocol(), this.sid) == ifname)
+               else if (this.isVirtual() && '%s-%s'.format(this.getProtocol(), this.sid) == device)
                        return true;
-               else if (this.isBridge() && 'br-%s'.format(this.sid) == ifname)
+               else if (this.isBridge() && 'br-%s'.format(this.sid) == device)
                        return true;
 
-               var ifnames = L.toArray(uci.get('network', this.sid, 'ifname'));
-
-               for (var i = 0; i < ifnames.length; i++) {
-                       var m = ifnames[i].match(/^([^:/]+)/);
-                       if (m != null && m[1] == ifname)
+               var name = uci.get('network', this.sid, 'device');
+               if (name) {
+                       var m = name.match(/^([^:/]+)/);
+                       if (m != null && m[1] == device)
                                return true;
                }
 
-               var wif = getWifiSidByIfname(ifname);
+               var wif = getWifiSidByIfname(device);
 
                if (wif != null) {
                        var networks = L.toArray(uci.get('wireless', wif, 'network'));
@@ -2791,19 +2787,19 @@ Protocol = baseclass.extend(/** @lends LuCI.network.Protocol.prototype */ {
  * device and allows querying device details such as packet statistics or MTU.
  */
 Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
-       __init__: function(ifname, network) {
-               var wif = getWifiSidByIfname(ifname);
+       __init__: function(device, network) {
+               var wif = getWifiSidByIfname(device);
 
                if (wif != null) {
                        var res = getWifiStateBySid(wif) || [],
                            netid = getWifiNetidBySid(wif) || [];
 
-                       this.wif    = new WifiNetwork(wif, res[0], res[1], netid[0], res[2], { ifname: ifname });
-                       this.ifname = this.wif.getIfname();
+                       this.wif    = new WifiNetwork(wif, res[0], res[1], netid[0], res[2], { ifname: device });
+                       this.device = this.wif.getIfname();
                }
 
-               this.ifname  = this.ifname || ifname;
-               this.dev     = Object.assign({}, _state.netdevs[this.ifname]);
+               this.device  = this.device || device;
+               this.dev     = Object.assign({}, _state.netdevs[this.device]);
                this.network = network;
        },
 
@@ -2826,7 +2822,7 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
         * Returns the name of the device, e.g. `eth0` or `wlan0`.
         */
        getName: function() {
-               return (this.wif != null ? this.wif.getIfname() : this.ifname);
+               return (this.wif != null ? this.wif.getIfname() : this.device);
        },
 
        /**
@@ -2887,17 +2883,17 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
         *  - `ethernet` for all other device types
         */
        getType: function() {
-               if (this.ifname != null && this.ifname.charAt(0) == '@')
+               if (this.device != null && this.device.charAt(0) == '@')
                        return 'alias';
-               else if (this.dev.devtype == 'wlan' || this.wif != null || isWifiIfname(this.ifname))
+               else if (this.dev.devtype == 'wlan' || this.wif != null || isWifiIfname(this.device))
                        return 'wifi';
-               else if (this.dev.devtype == 'bridge' || _state.isBridge[this.ifname])
+               else if (this.dev.devtype == 'bridge' || _state.isBridge[this.device])
                        return 'bridge';
-               else if (_state.isTunnel[this.ifname])
+               else if (_state.isTunnel[this.device])
                        return 'tunnel';
-               else if (this.dev.devtype == 'vlan' || this.ifname.indexOf('.') > -1)
+               else if (this.dev.devtype == 'vlan' || this.device.indexOf('.') > -1)
                        return 'vlan';
-               else if (this.dev.devtype == 'dsa' || _state.isSwitch[this.ifname])
+               else if (this.dev.devtype == 'dsa' || _state.isSwitch[this.device])
                        return 'switch';
                else
                        return 'ethernet';
@@ -2914,7 +2910,7 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
                if (this.wif != null)
                        return this.wif.getShortName();
 
-               return this.ifname;
+               return this.device;
        },
 
        /**
@@ -2954,11 +2950,11 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
                        return _('Bridge');
 
                case 'switch':
-                       return (_state.netdevs[this.ifname] && _state.netdevs[this.ifname].devtype == 'dsa')
+                       return (_state.netdevs[this.device] && _state.netdevs[this.device].devtype == 'dsa')
                                ? _('Switch port') : _('Ethernet Switch');
 
                case 'vlan':
-                       return (_state.isSwitch[this.ifname] ? _('Switch VLAN') : _('Software VLAN'));
+                       return (_state.isSwitch[this.device] ? _('Switch VLAN') : _('Software VLAN'));
 
                case 'tunnel':
                        return _('Tunnel Interface');
@@ -2977,7 +2973,7 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
         * a Linux bridge.
         */
        getPorts: function() {
-               var br = _state.bridges[this.ifname],
+               var br = _state.bridges[this.device],
                    rv = [];
 
                if (br == null || !Array.isArray(br.ifnames))
@@ -2999,7 +2995,7 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
         * device is not a Linux bridge.
         */
        getBridgeID: function() {
-               var br = _state.bridges[this.ifname];
+               var br = _state.bridges[this.device];
                return (br != null ? br.id : null);
        },
 
@@ -3011,7 +3007,7 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
         * enabled, else `false`.
         */
        getBridgeSTP: function() {
-               var br = _state.bridges[this.ifname];
+               var br = _state.bridges[this.device];
                return (br != null ? !!br.stp : false);
        },
 
@@ -3123,7 +3119,7 @@ Device = baseclass.extend(/** @lends LuCI.network.Device.prototype */ {
                        var networks = enumerateNetworks.apply(L.network);
 
                        for (var i = 0; i < networks.length; i++)
-                               if (networks[i].containsDevice(this.ifname) || networks[i].getIfname() == this.ifname)
+                               if (networks[i].containsDevice(this.device) || networks[i].getIfname() == this.device)
                                        this.networks.push(networks[i]);
 
                        this.networks.sort(networkSort);
index e3502c05287217b56cfe90307796f0ee3b18473c..6dc30bbe5ac1a62a1735e3d716b6a608c9d73f1d 100644 (file)
@@ -299,7 +299,7 @@ return view.extend({
                ]);
        },
 
-       interfaceWithIfnameSections: function() {
+       interfaceBridgeWithIfnameSections: function() {
                return uci.sections('network', 'interface').filter(function(ns) {
                        return ns.type == 'bridge' && !ns.ports && ns.ifname;
                });
@@ -311,8 +311,14 @@ return view.extend({
                });
        },
 
+       interfaceWithIfnameSections: function() {
+               return uci.sections('network', 'interface').filter(function(ns) {
+                       return !ns.device && ns.ifname;
+               });
+       },
+
        handleMigration: function(ev) {
-               var interfaces = this.interfaceWithIfnameSections();
+               var interfaces = this.interfaceBridgeWithIfnameSections();
                var tasks = [];
 
                interfaces.forEach(function(ns) {
@@ -326,7 +332,7 @@ return view.extend({
 
                        tasks.push(uci.callSet('network', ns['.name'], {
                                'type': '',
-                               'ifname': device_name
+                               'device': device_name
                        }));
                });
 
@@ -337,6 +343,13 @@ return view.extend({
                        }));
                });
 
+               this.interfaceWithIfnameSections().forEach(function(ns) {
+                       tasks.push(uci.callSet('network', ns['.name'], {
+                               'ifname': '',
+                               'device': ns.ifname
+                       }));
+               });
+
                return Promise.all(tasks)
                        .then(L.bind(ui.changes.init, ui.changes))
                        .then(L.bind(ui.changes.apply, ui.changes));
@@ -358,8 +371,9 @@ return view.extend({
                var netifdVersion = (data[3] || '').match(/Version: ([^\n]+)/);
 
                if (netifdVersion && netifdVersion[1] >= "2021-05-20" &&
-                   (this.interfaceWithIfnameSections().length ||
-                    this.deviceWithIfnameSections().length))
+                   (this.interfaceBridgeWithIfnameSections().length ||
+                    this.deviceWithIfnameSections().length ||
+                    this.interfaceWithIfnameSections().length))
                        return this.renderMigration();
 
                var dslModemType = data[0],
@@ -468,9 +482,8 @@ return view.extend({
                                }, this);
                                o.write = function() {};
 
-                               o = s.taboption('general', widgets.DeviceSelect, 'ifname', _('Device'));
+                               o = s.taboption('general', widgets.DeviceSelect, 'device', _('Device'));
                                o.nobridges = false;
-                               o.noaliases = false;
                                o.optional = false;
                                o.network = ifc.getName();
 
@@ -844,7 +857,7 @@ return view.extend({
                                        o = s.children[i];
 
                                        switch (o.option) {
-                                       case 'ifname':
+                                       case 'device':
                                        case 'proto':
                                        case 'auto':
                                        case '_dhcp':
@@ -884,10 +897,10 @@ return view.extend({
 
                s.handleModalCancel = function(/* ... */) {
                        var type = uci.get('network', this.activeSection || this.addedSection, 'type'),
-                           ifname = (type == 'bridge') ? 'br-%s'.format(this.activeSection || this.addedSection) : null;
+                           device = (type == 'bridge') ? 'br-%s'.format(this.activeSection || this.addedSection) : null;
 
                        uci.sections('network', 'bridge-vlan', function(bvs) {
-                               if (ifname != null && bvs.device == ifname)
+                               if (device != null && bvs.device == device)
                                        uci.remove('network', bvs['.name']);
                        });
 
@@ -898,7 +911,7 @@ return view.extend({
                        var m2 = new form.Map('network'),
                            s2 = m2.section(form.NamedSection, '_new_'),
                            protocols = network.getProtocols(),
-                           proto, name, ifname;
+                           proto, name, device;
 
                        protocols.sort(function(a, b) {
                                return a.getProtocol() > b.getProtocol();
@@ -928,9 +941,9 @@ return view.extend({
                                return true;
                        };
 
-                       ifname = s2.option(widgets.DeviceSelect, 'ifname', _('Device'));
-                       ifname.noaliases = false;
-                       ifname.optional = false;
+                       device = s2.option(widgets.DeviceSelect, 'device', _('Device'));
+                       device.noaliases = false;
+                       device.optional = false;
 
                        proto = s2.option(form.ListValue, 'proto', _('Protocol'));
                        proto.validate = name.validate;
@@ -969,7 +982,7 @@ return view.extend({
                                                                                var section_id = uci.add('network', 'interface', nameval);
 
                                                                                protoclass.set('proto', protoval);
-                                                                               protoclass.addDevice(ifname.formvalue('_new_'));
+                                                                               protoclass.addDevice(device.formvalue('_new_'));
 
                                                                                m.children[0].addedSection = section_id;
                                                                        }).then(L.bind(m.children[0].renderMoreOptionsModal, m.children[0], nameval));